<?php

class UserChangePassForm extends CFormModel {

    public $old_password;
    public $new_password_1;
    public $new_password_2;
    public $question;
    public $answer;
    public $state;

    /**
     * Declares the validation rules.
     * The rules state that username and password are required,
     * and password needs to be authenticated.
     */
    public function rules() {
        return array(
            array('old_password', 'required', 'message' => Yii::t('text', 'Old Password không được rỗng')),
            array('new_password_1', 'required', 'message' => Yii::t('text', 'New Password không được rỗng')),
            array('new_password_1', 'length', 'min' => 6, 'max' => 50),
            array('new_password_1',
                'match',
                'not' => false,
                'pattern' => '/[0-9]/',
                'message' => 'New Password phải có ít nhất 1 chữ số'),
            array('new_password_1',
                'match',
                'not' => false,
                'pattern' => '/[-_!@#$%^&*()+=?.,]/',
                'message' => 'New Password phải có ít nhất 1 ký tự đặc biêt: - _ ! @ # $ % ^ & * ( ) + = ? . ,'),
            array('new_password_1',
                'match',
                'not' => false,
                'pattern' => '/[A-Z]/',
                'message' => 'New Password phải có ít nhất 1 ký tự viết hoa: A, B, C ... Z'),
            array('new_password_2', 'required', 'message' => Yii::t('text', 'Retype new Password không được rỗng')),
            array('old_password', 'checkOldPass'),
            array('new_password_2', 'checkNewPass'),
            array('answer', 'required', 'message' => Yii::t('text', 'Câu trả lời không được rỗng')),
        );
    }

    /**
     * Check the old pass is Ok or not
     * 
     * @param array $attribute
     * @param array $params
     * @return boolean 
     */
    public function checkOldPass($attribute, $params) {
        $u = User::model()->findbyPk(user()->id);
        if ($u != null) {
            if (!PassHash::authenticate($this->old_password, $u->password)) {
                $this->addError($attribute, t('cms', 'Old Password không chính xác'));
                return false;
            }
        } else {
            $this->addError($attribute, t('cms', 'No User Found!'));
            return false;
        }
    }

    /**
     * Compare the two new password match or not
     * @param array $attribute
     * @param array $params
     * @return boolean
     */
    public function checkNewPass($attribute, $params) {
        if ($this->new_password_1 != $this->new_password_2) {
            $this->addError($attribute, t('cms', 'New Password và Retype new Password phải giống nhau'));
            return false;
        }
    }

    /**
     * Declares attribute labels.
     */
    public function attributeLabels() {
        return array(
            'old_password' => t('cms', 'Old Password'),
            'new_password_1' => t('cms', 'New Password'),
            'new_password_2' => t('cms', 'Retype new Password'),
            'question' => t('cms', 'Question'),
            'answer' => t('cms', 'Answer'),
        );
    }

}
